package com.asen.commons.config;

import com.asen.commons.factory.YamlPropertySourceFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 缓存数据配置，如缓存查不到即远程调用查询
 * @author liuhui
 * @date 2018-12-12
 */
@Configuration
@Component
@ConfigurationProperties(prefix = "cache-config")
@PropertySource(value = "classpath:CacheConfig.yml", factory = YamlPropertySourceFactory.class)
public class CacheDataConfig {
	/**缓存配置明细*/
	public List<CacheItemConfig> cacheItemList = new ArrayList<CacheItemConfig>(16);
	
	private Map<String,CacheItemConfig> mapCacheItem = null;
	/**
	 * 通过类名获取对应缓存配置项
	 * @param className
	 * @return
	 */
	public CacheItemConfig get(String className) {
		if(mapCacheItem == null){
			initCacheItemMap();
		}
		return mapCacheItem.get(className);
	}
	
	/**
	 * 初始化
	 */
	private void initCacheItemMap() {
		if(mapCacheItem == null) {
			synchronized(CacheDataConfig.class) {
				if(mapCacheItem != null) {
					return;
				}
				mapCacheItem = new HashMap<String,CacheItemConfig>();
				for(CacheItemConfig c : cacheItemList) {
					mapCacheItem.put(c.getClassName(), c);
				}
			}
		}
	}

	public List<CacheItemConfig> getCacheItemList() {
		return cacheItemList;
	}

	public void setCacheItemList(List<CacheItemConfig> cacheItemList) {
		this.cacheItemList = cacheItemList;
	}
	
	
}
